package com.tiancheng.onecode.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tiancheng.onecode.entity.Merchant;
import com.tiancheng.onecode.entity.PlatformMerchantSettleRule;
import com.tiancheng.onecode.model.dto.PayMerchantDTO;
import com.tiancheng.onecode.model.dto.PlatformMerchantUserDetailDTO;
import com.tiancheng.onecode.model.request.admin.*;
import com.tiancheng.onecode.model.response.PageInfo;
import com.tiancheng.onecode.model.response.admin.*;
import com.tiancheng.onecode.trade.model.request.MerchantBranchBankListReqVO;
import com.tiancheng.onecode.trade.model.request.TradeMerchantStatusReq;
import com.tiancheng.onecode.trade.model.response.MerchantBranchBankListResVO;
import com.tiancheng.onecode.trade.model.response.QueryAreaRes;
import com.tiancheng.onecode.trade.model.response.QueryMccRes;

import java.util.List;

/**
 * @Author: kellen
 * @Description: 商户service
 * @Date: create in 2024/12/9 18:21
 */
public interface IMerchantService extends IService<Merchant> {
    /**
     * 分页查询
     *
     * @param params
     * @return
     */
    PageInfo<MerchantQueryRes> queryPage(MerchantQueryReq params);

    /**
     * 第一步：添加商户
     *
     * @param params
     * @return
     */
    MerchantAddStepOneNewRes addNew(MerchantAddReqNew params);
    /**
     * 第二步：添加商户超级管理员
     *
     * @param params
     * @return
     */
    void addMerchantSuperAdmin(MerchantAddSuperAdminReq params);
    /**
     * 第三步：添加结算信息
     *
     * @param rule
     * @return
     */
    void addSettlement(PlatformMerchantSettleRule rule);
    /**
     * 根据商户编码、平台编码查询
     *
     * @param platformCode 平台编码
     * @param merchantCode 商户编码
     * @return
     */
    MerchantAddStepOneRes queryByPlatformCodeAndMerchantCode(String platformCode, String merchantCode);

    /**
     * 查询商户基础信息
     * @param platformMerchantId
     * @return
     */
    MerchantAddStepOneRes queryByPlatformMerchantId(Long platformMerchantId);
    /**
     * 根据社会信用代码查询商户信息
     *
     * @param platformCode
     * @param shopLic
     * @return
     */
    MerchantAddStepOneRes queryByShopLic(String platformCode, String shopLic);
    /**
     * 根据商户编码查询
     *
     * @param merchantCode
     * @return
     */
    Merchant getByMerchantCode(String merchantCode);
    /**
     * 查询商户明细信息
     *
     * @param platformMerchantId
     * @return
     */
    PlatformMerchantBaseInfoRes queryMerchantBaseInfo(Long platformMerchantId);
    /**
     * 查询业务信息
     *
     * @param platformMerchantId 平台商户id
     * @return
     */
    PlatformMerchantBusinessInfoRes queryMerchantBusinessInfo(Long platformMerchantId);
    /**
     * 修改清分规则
     * @param params
     */
    void updateSettlement(MerchantUpdateSettlReq params);

    /**
     * 停用清分规则
     * @param platformMerchantId 平台关联商户id
     */
    void deactivateSettlement(Long platformMerchantId);

    /**
     * 添加清分规则
     * @param params 规则信息
     */
    void addSettlementRule(MerchantAddSettlRuleReq params);

    /**
     * 设置商户状态
     * @param params
     */
    void setMerchantStatusNew(MerchantStatusSetReq params);
    /**
     * 更换管理员名称
     * @param setMerchantAdminReq
     * @return
     */
    PlatformMerchantUserDetailDTO changeMerchantAdmin(SetMerchantAdminReq setMerchantAdminReq);

    /**
     * 更新商户进件信息
     * @param params
     */
    void updateMerchantInfoNew(MerchantUpdateNewReq params);
    /**
     * 商户状态变更
     * @param merchantStatusReq
     */
    void merchantStatusChangeNotify(TradeMerchantStatusReq merchantStatusReq);

    /**
     * 查询支付商户信息
     * @param platformMerchantId
     * @return
     */
    PayMerchantDTO queryPayMerchant(Long platformMerchantId);

    /**
     * 查询支付商户信息
     * @param merchantCode
     * @return
     */
    PayMerchantDTO queryPayMerchantByCode(String merchantCode);

    /**
     * 当前商户
     * @param merchantCode
     * @return
     */
    QueryCurrentMerchantRes currentMerchant(String merchantCode);

    /**
     * 平台商户统计
     * @param platformCode
     * @return
     */
    MerchantStatisticsRes merchantStatistics(String platformCode);

    /**
     * 根据商户号查询商户基础信息
     * @param merchantsReq
     * @return
     */
    List<MerchantSimpleInfoRes> queryMerchantSimpleInfo(QueryMerchantsReq merchantsReq);

    /**
     * 区域查询
     * @param dataType
     * @return
     */
    String regionData(String dataType);

    /**
     * 查询地区列表
     * @param parentAreaCode 父级地区id
     * @return
     */
    List<QueryAreaRes> queryByParentAreaCode(String parentAreaCode);

    /**
     * 行业列表
     * @param mccName
     * @return
     */
    List<QueryMccRes> mccList(String mccName);

    /**
     * 开户行信息查询
     * @param merchantBranchBankListReqVO
     * @return
     */
    List<MerchantBranchBankListResVO> branchBankList(MerchantBranchBankListReqVO merchantBranchBankListReqVO);

    /**
     * 发起对公账户验证申请
     * @param params
     */
    void merchantAccountVerify(MerchantAccountVerifyReq params);

    /**
     * 对公账户（打款金额）验证
     * @param param
     */
    Boolean companyAccountVerify(MerchantCompanyAccountVerifyReq param);

    /**
     * 获取前台签约跳转地址
     * @param param
     * @return
     */
    String agreementSign(MerchantPayAgreementSignReq param);

    /**
     * 根据商户进件id查询状态
     * @param platformMerchantId 平台商户id
     * @return
     */
    MerchantRegStatusRes queryMerchantStatus(Long platformMerchantId);
}
